package com.mm.util;

import com.mm.pojo.StdRandom;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 生成账号
 *
 * @ClassName: GenerateNumber.java
 * @version: v1.0.0
 * @author: 杨朝湖
 * @date: 2019年4月24日 下午1:01:52
 */
public class GenerateKeyUtil {
    /**
     * 生成编号用户的key
     *
     * @return
     */
    public static String getKey() {
        // 获取时间(年)
        SimpleDateFormat dfYear = new SimpleDateFormat("yy");
        String dataYear = dfYear.format(new Date());
        // 获取时间(月)
        SimpleDateFormat dfMonth = new SimpleDateFormat("MM");
        String dataMonth = dfMonth.format(new Date());
        // 获取时间(日)
        SimpleDateFormat dfDay = new SimpleDateFormat("dd");
        String dataDay = dfDay.format(new Date());
        // Random ra = new Random();
        // 获取4位随机数
        int randFore = (int) (Math.random() * (9999 - 1000 + 1) + 1000);
        // 生成随机2位随机数
        int randTwo = (int) (Math.random() * 89 + 10);

        // 返回12位的字符串位编号 固定参数、时间月、4位随机数、日期天、2位随机数
        return dataYear + "0617" + dataMonth + "" + randFore + "" + dataDay + "" + randTwo;
    }

    public static String randomPassword(int len) {
        if (len < 3) {
            throw new IllegalArgumentException("字符串长度不能小于3");
        }
        // 数组，用于存放随机字符
        char[] chArr = new char[len];
        // 为了保证必须包含数字、大小写字母
        chArr[0] = (char) ('0' + StdRandom.uniform(0, 10));
        chArr[1] = (char) ('A' + StdRandom.uniform(0, 26));
        chArr[2] = (char) ('a' + StdRandom.uniform(0, 26));

        char[] codes = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
                'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
                'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
                'z'};
        // charArr[3..len-1]随机生成codes中的字符
        for (int i = 3; i < len; i++) {
            chArr[i] = codes[StdRandom.uniform(0, codes.length)];
        }

        // 将数组chArr随机排序
        for (int i = 0; i < len; i++) {
            int r = i + StdRandom.uniform(len - i);
            char temp = chArr[i];
            chArr[i] = chArr[r];
            chArr[r] = temp;
        }

        return new String(chArr);
    }
}
